package com.stq.toutiao.api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.stq.toutiao.model.response.TouTiaoBase;
import com.stq.toutiao.model.request.TouTiaoUserStorageParam;

import java.util.HashMap;
import java.util.Map;

import static com.stq.toutiao.config.TouTiaoUrlConfig.REMOVEUSERSTORAGE_URL;
import static com.stq.toutiao.config.TouTiaoUrlConfig.SETUSERSTORAGE_URL;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_1;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_2;

/**
 * 1)setUserStorage:以 key-value 形式上报用户数据到字节跳动的云存储服务。
 * 2)removeUserStorage:删除上报到字节跳动的云存储服务的 key-value 数据。
 *
 * @author stqsht@163.com
 * @date 2020-01-23 19:40
 */
public class TouTiaoUserStorageApi {
    /**
     * 以 key-value 形式上报用户数据到字节跳动的云存储服务。
     *
     * @param param
     * @return
     */
    public TouTiaoBase setUserStorage(TouTiaoUserStorageParam param) {
        if (StrUtil.isEmpty(param.getAccessToken()) || StrUtil.isEmpty(param.getOpenid())
                || StrUtil.isEmpty(param.getSignature()) || StrUtil.isEmpty(param.getSigMethod())
                || StrUtil.isEmpty(param.getKvList())) {
            return new TouTiaoBase(ERRCODE_NEGATIVE_2.getErrcode(), ERRCODE_NEGATIVE_2.getErrmsg());
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("access_token", param.getAccessToken());
        params.put("openid", param.getOpenid());
        params.put("signature", param.getSignature());
        params.put("sig_method", param.getSigMethod());
        params.put("kv_list", param.getKvList());
        String post = HttpUtil.post(SETUSERSTORAGE_URL, params);
        if (StrUtil.isEmpty(post)) {
            return new TouTiaoBase(ERRCODE_NEGATIVE_1.getErrcode(), ERRCODE_NEGATIVE_1.getErrmsg());
        }
        return JSONObject.parseObject(post, TouTiaoBase.class);
    }

    /**
     * 删除上报到字节跳动的云存储服务的 key-value 数据。
     *
     * @param param
     * @return
     */
    public TouTiaoBase removeUserStorage(TouTiaoUserStorageParam param) {
        if (StrUtil.isEmpty(param.getAccessToken()) || StrUtil.isEmpty(param.getOpenid())
                || StrUtil.isEmpty(param.getSignature()) || StrUtil.isEmpty(param.getSigMethod())
                || StrUtil.isEmpty(param.getKey())) {
            return new TouTiaoBase(ERRCODE_NEGATIVE_2.getErrcode(), ERRCODE_NEGATIVE_2.getErrmsg());
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("access_token", param.getAccessToken());
        params.put("openid", param.getOpenid());
        params.put("signature", param.getSignature());
        params.put("sig_method", param.getSigMethod());
        params.put("key", param.getKey());
        String post = HttpUtil.post(REMOVEUSERSTORAGE_URL, params);
        if (StrUtil.isEmpty(post)) {
            return new TouTiaoBase(ERRCODE_NEGATIVE_1.getErrcode(), ERRCODE_NEGATIVE_1.getErrmsg());
        }
        return JSONObject.parseObject(post, TouTiaoBase.class);
    }

}
